"use strict";
var tpsClass = require('./../serialbootstrap/es6/Model/TPS/index.js');
/** 根据倾角计读取角度计算水平、竖直分量 */
class AngleSectionCalculate {
    constructor(option) {
        /** 初始断面的中心坐标 */
        this.sectionCenter = null;
        /** 初始全站仪（后视pb、前视pf）所在位置坐标 */
        this.targetOriginal = null;
        // /** 当前全站仪（后视pb、前视pf）所在位置坐标 */
        // this.targetNow = null;
        /** 初始倾角计读数*/
        this.angleOriginal = null;
        /** 当前倾角计读数*/
        this.angleNow = null;
        this.sectionCenter = option.sectionCenter;
        this.targetOriginal = option.targetOriginal;
        this.targetNow = option.targetNow;
        this.angleOriginal = option.angleOriginal;//指定x为旋转角
        this.angleNow = option.angleNow;
    }
    /**
     * 根据断面旋转后与断面中心水平线的夹角，求取断面中心-目标点在水平、竖直方向的偏差
     * @return {[verticalDiff,horizontalDiff]}
     * verticalDiff:竖直方向偏差，高于中心点为负，低于中心点为正
     * horizontalDiff：水平方向偏差，与初始偏差方向（左右）保持一致
     */
    calculateDiff() {
        var v = new tpsClass.SurveyVector(this.sectionCenter, this.targetOriginal);
        var angle = this.levelAngle();
        let verticalDiff = 0;
        let horizontalDiff = 0;
        if (angle < Math.PI / 2 && angle > -Math.PI / 2) {
            verticalDiff = -v.slope * Math.sin(angle);
            horizontalDiff = v.slope * Math.cos(angle);
            if (v.distance - horizontalDiff < 0.01) {
                horizontalDiff = v.distance;
            }
        }
        else {
            verticalDiff = null;
            horizontalDiff = null;
        }
        return [horizontalDiff, verticalDiff];
    }
    /**
     * 获取全站仪（后视pb、前视pf）所在断面旋转之后与断面中心水平线的夹角
     * @return {number} 以弧度为单位的水平角
     */
    levelAngle() {
        var v = new tpsClass.SurveyVector(this.sectionCenter, this.targetOriginal);
        var Angle = this.angleNow*Math.PI/180 - this.angleOriginal*Math.PI/180 + v.verticalAngle;
        return Angle;
    }
}
module.exports = AngleSectionCalculate;
